import type { ErrorMessageMode } from '#/axios';
import { useI18n } from '@/hooks/web/useI18n';
import { useIdentityStoreWithOut } from '@/store/modules/identity';
import { useMessage } from '@/hooks/web/useMessage';
import projectSetting from '@/settings/projectSetting';
import { SessionTimeoutProcessingEnum } from '@/enums/appEnum';
import { h } from 'vue';
import { MessageArgsProps } from 'ant-design-vue';

const { createMessage, createErrorModal } = useMessage();
const error = createMessage.error!;
const stp = projectSetting.sessionTimeoutProcessing;

/**
 * 审核状态
 * @param status 状态码
 * @param msg 状态消息
 * @param errorMessageMode 错误消息提示模式
 */
export async function checkStatus(
  status: number,
  msg: string,
  errorMessageMode: ErrorMessageMode = 'message',
) {
  const { t } = useI18n();
  const useIdentityStore = useIdentityStoreWithOut();
  let statusMsg = '';
  let errMessage = '';
  const msgString = msg !== undefined && msg !== null && msg !== '' ? ` ${msg}` : '';
  if (!status) {
    errMessage = msgString;
  }
  switch (status) {
    case 100:
      statusMsg = `${status} - ${t('sys.api.msg100')}${msgString}`;
      break;
    case 101:
      statusMsg = `${status} - ${t('sys.api.msg101')}${msgString}`;
      break;
    case 102:
      statusMsg = `${status} - ${t('sys.api.msg102')}${msgString}`;
      break;
    case 200:
      statusMsg = `${status} - ${t('sys.api.msg200')}${msgString}`;
      break;
    case 201:
      statusMsg = `${status} - ${t('sys.api.msg201')}${msgString}`;
      break;
    case 202:
      statusMsg = `${status} - ${t('sys.api.msg202')}${msgString}`;
      break;
    case 203:
      statusMsg = `${status} - ${t('sys.api.msg203')}${msgString}`;
      break;
    case 204:
      statusMsg = `${status} - ${t('sys.api.msg204')}${msgString}`;
      break;
    case 205:
      statusMsg = `${status} - ${t('sys.api.msg205')}${msgString}`;
      break;
    case 206:
      statusMsg = `${status} - ${t('sys.api.msg206')}${msgString}`;
      break;
    case 207:
      statusMsg = `${status} - ${t('sys.api.msg207')}${msgString}`;
      break;
    case 300:
      statusMsg = `${status} - ${t('sys.api.msg300')}${msgString}`;
      break;
    case 301:
      statusMsg = `${status} - ${t('sys.api.msg301')}${msgString}`;
      break;
    case 302:
      statusMsg = `${status} - ${t('sys.api.msg302')}${msgString}`;
      break;
    case 303:
      statusMsg = `${status} - ${t('sys.api.msg303')}${msgString}`;
      break;
    case 304:
      statusMsg = `${status} - ${t('sys.api.msg304')}${msgString}`;
      break;
    case 305:
      statusMsg = `${status} - ${t('sys.api.msg305')}${msgString}`;
      break;
    case 306:
      statusMsg = `${status} - ${t('sys.api.msg306')}${msgString}`;
      break;
    case 307:
      statusMsg = `${status} - ${t('sys.api.msg307')}${msgString}`;
      break;
    case 400:
      statusMsg = `${status} - ${t('sys.api.msg400')}${msgString}`;
      errMessage = statusMsg;
      break;
    // 401: Not logged in
    // Jump to the login page if not logged in, and carry the path of the current page
    // Return to the current page after successful login. This step needs to be operated on the login page.
    case 401:
      await useIdentityStore.setToken(undefined);
      statusMsg = `${status} - ${t('sys.api.msg401')}${msgString}`;
      errMessage = statusMsg;
      if (stp === SessionTimeoutProcessingEnum.PAGE_COVERAGE) {
        useIdentityStore.setSessionTimeout(true);
      } else {
        // 被动登出，带redirect地址
        await useIdentityStore.logout(false);
      }
      break;
    case 403:
      statusMsg = `${status} - ${t('sys.api.msg403')}${msgString}`;
      errMessage = statusMsg;
      break;
    // 404请求不存在
    case 404:
      statusMsg = `${status} - ${t('sys.api.msg404')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 405:
      statusMsg = `${status} - ${t('sys.api.msg405')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 406:
      statusMsg = `${status} - ${t('sys.api.msg406')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 407:
      statusMsg = `${status} - ${t('sys.api.msg407')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 408:
      statusMsg = `${status} - ${t('sys.api.msg408')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 409:
      statusMsg = `${status} - ${t('sys.api.msg409')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 410:
      statusMsg = `${status} - ${t('sys.api.msg410')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 411:
      statusMsg = `${status} - ${t('sys.api.msg411')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 412:
      statusMsg = `${status} - ${t('sys.api.msg412')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 413:
      statusMsg = `${status} - ${t('sys.api.msg413')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 414:
      statusMsg = `${status} - ${t('sys.api.msg414')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 415:
      statusMsg = `${status} - ${t('sys.api.msg415')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 416:
      statusMsg = `${status} - ${t('sys.api.msg416')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 417:
      statusMsg = `${status} - ${t('sys.api.msg417')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 418:
      statusMsg = `${status} - ${t('sys.api.msg418')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 421:
      statusMsg = `${status} - ${t('sys.api.msg421')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 422:
      statusMsg = `${status} - ${t('sys.api.msg422')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 423:
      statusMsg = `${status} - ${t('sys.api.msg423')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 424:
      statusMsg = `${status} - ${t('sys.api.msg424')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 425:
      statusMsg = `${status} - ${t('sys.api.msg425')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 426:
      statusMsg = `${status} - ${t('sys.api.msg426')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 428:
      statusMsg = `${status} - ${t('sys.api.msg428')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 429:
      statusMsg = `${status} - ${t('sys.api.msg429')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 431:
      statusMsg = `${status} - ${t('sys.api.msg431')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 449:
      statusMsg = `${status} - ${t('sys.api.msg449')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 451:
      statusMsg = `${status} - ${t('sys.api.msg451')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 500:
      statusMsg = `${status} - ${t('sys.api.msg500')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 501:
      statusMsg = `${status} - ${t('sys.api.msg501')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 502:
      statusMsg = `${status} - ${t('sys.api.msg502')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 503:
      statusMsg = `${status} - ${t('sys.api.msg503')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 504:
      statusMsg = `${status} - ${t('sys.api.msg504')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 505:
      statusMsg = `${status} - ${t('sys.api.msg505')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 506:
      statusMsg = `${status} - ${t('sys.api.msg506')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 507:
      statusMsg = `${status} - ${t('sys.api.msg507')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 509:
      statusMsg = `${status} - ${t('sys.api.msg509')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 510:
      statusMsg = `${status} - ${t('sys.api.msg510')}${msgString}`;
      errMessage = statusMsg;
      break;
    case 511:
      statusMsg = `${status} - ${t('sys.api.msg511')}${msgString}`;
      errMessage = statusMsg;
      break;
    default:
      statusMsg = `${status} - ${t('sys.api.requestError')}${msgString}`;
      errMessage = statusMsg;
      break;
  }
  if (errMessage) {
    if (errorMessageMode === 'modal') {
      createErrorModal({
        title: () => h('span', t('sys.api.errorTip')),
        content: () => h('span', errMessage),
      });
    } else if (errorMessageMode === 'message') {
      const messageProps: MessageArgsProps = {
        content: errMessage,
        duration: undefined,
        type: 'error',
        // prefixCls?: null,
        // rootPrefixCls?: null,
        // onClose?: () => {},
        // icon?: null,
        key: `global_error_message_status_${status}`,
        // style?: null,
        // class?: null,
        // appContext?: null,
      };
      error(messageProps);
    }
  }
}
